package city.spring.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import org.apache.ibatis.reflection.property.PropertyNamer;

/**
 * 组织机构工具
 *
 * @author HouKunLin
 * @date 2020/7/13 0013 17:09
 */
public class OrganizationUtils {
    /**
     * 查询组织机构范围内的数据
     *
     * @param lambdaQuery 查询对象
     * @param orgField    组织机构的字段
     * @param <E>         实体对象
     */
    public static <E> void includes(LambdaQueryChainWrapper<E> lambdaQuery, SFunction<E, ?> orgField) {
        lambdaQuery.in(orgField, UserUtils.getOrgIds());
    }

    /**
     * 查询组织机构范围内的数据
     *
     * @param queryWrapper 查询对象
     * @param orgField     组织机构的字段
     * @param <E>          实体对象
     */
    public static <E> void includes(QueryWrapper<E> queryWrapper, String orgField) {
        queryWrapper.in(orgField, UserUtils.getOrgIds());
    }

    /**
     * 查询组织机构范围内的数据
     *
     * @param queryWrapper 查询对象
     * @param orgField     组织机构的字段
     * @param <E>          实体对象
     */
    public static <E> void includes(QueryWrapper<E> queryWrapper, SFunction<E, ?> orgField) {
        includes(queryWrapper,
                PropertyNamer.methodToProperty(LambdaUtils.resolve(orgField).getImplMethodName()));
    }

}
